```html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>RabbitMQ消息模型详解 | 技术小馆</title>
    <link href="https://cdn.staticfile.org/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
    <link href="https://cdn.staticfile.org/tailwindcss/2.2.19/tailwind.min.css" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/mermaid@latest/dist/mermaid.min.js"></script>
    <style>
        body {
            font-family: 'Noto Sans SC', Tahoma, Arial, Roboto, "Droid Sans", "Helvetica Neue", "Droid Sans Fallback", "Heiti SC", "Hiragino Sans GB", Simsun, sans-serif;
            color: #333;
            line-height: 1.6;
        }
        h1, h2, h3, h4 {
            font-family: 'Noto Serif SC', serif;
            font-weight: 600;
        }
        .hero {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        }
        .card {
            transition: transform 0.3s ease, box-shadow 0.3s ease;
        }
        .card:hover {
            transform: translateY(-5px);
            box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
        }
        .model-icon {
            font-size: 2.5rem;
            color: #667eea;
        }
        .feature-icon {
            color: #4c51bf;
        }
        .mermaid {
            background-color: #fff;
            border-radius: 0.5rem;
            padding: 1.5rem;
            box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
        }
        .nav-link {
            position: relative;
        }
        .nav-link::after {
            content: '';
            position: absolute;
            bottom: -2px;
            left: 0;
            width: 0;
            height: 2px;
            background-color: #667eea;
            transition: width 0.3s ease;
        }
        .nav-link:hover::after {
            width: 100%;
        }
        .active::after {
            width: 100%;
        }
        .back-to-top {
            position: fixed;
            bottom: 2rem;
            right: 2rem;
            opacity: 0;
            transition: opacity 0.3s ease;
        }
        .back-to-top.visible {
            opacity: 1;
        }
    </style>
</head>
<body class="bg-gray-50">
    <!-- Hero Section -->
    <section class="hero text-white py-20">
        <div class="container mx-auto px-6 text-center">
            <h1 class="text-4xl md:text-5xl font-bold mb-4">RabbitMQ 消息模型全解析</h1>
            <p class="text-xl md:text-2xl mb-8 max-w-3xl mx-auto">构建高可靠、高可扩展分布式系统的核心消息传递模式</p>
            <div class="flex flex-wrap justify-center gap-4 mt-8">
                <a href="#basic-concepts" class="px-6 py-3 bg-white text-indigo-600 font-medium rounded-full hover:bg-gray-100 transition duration-300">核心概念</a>
                <a href="#models" class="px-6 py-3 border-2 border-white text-white font-medium rounded-full hover:bg-white hover:text-indigo-600 transition duration-300">消息模型</a>
            </div>
        </div>
    </section>

    <!-- Navigation -->
    <nav class="sticky top-0 bg-white shadow-md z-10">
        <div class="container mx-auto px-6 py-4">
            <div class="flex justify-center space-x-8">
                <a href="#basic-concepts" class="nav-link text-gray-700 hover:text-indigo-600">核心概念</a>
                <a href="#direct-model" class="nav-link text-gray-700 hover:text-indigo-600">点对点模型</a>
                <a href="#fanout-model" class="nav-link text-gray-700 hover:text-indigo-600">发布订阅</a>
                <a href="#topic-model" class="nav-link text-gray-700 hover:text-indigo-600">主题模型</a>
                <a href="#work-model" class="nav-link text-gray-700 hover:text-indigo-600">工作模型</a>
                <a href="#rpc-model" class="nav-link text-gray-700 hover:text-indigo-600">RPC模型</a>
            </div>
        </div>
    </nav>

    <!-- Main Content -->
    <main class="container mx-auto px-6 py-12">
        <!-- Introduction -->
        <section class="mb-16">
            <div class="max-w-4xl mx-auto">
                <p class="text-lg text-gray-700 mb-6">
                    RabbitMQ 是一个流行的开源消息队列软件，被广泛用于构建可靠、可扩展的分布式系统。在 RabbitMQ 中，消息传递采用了一种基于消息队列的模型，通过生产者将消息发送到队列，然后由消费者从队列中接收并处理消息。这种模型提供了一种异步通信的方式，能够有效地解耦生产者和消费者，提高系统的可靠性和可扩展性。
                </p>
                <div class="bg-white rounded-xl shadow-md overflow-hidden mb-8">
                    <img src="https://cdn.nlark.com/yuque/0/2024/png/21449790/1712803536778-d4f2efd7-6ef3-4697-85f6-e3061c07bfb5.png" alt="RabbitMQ架构" class="w-full">
                </div>
                <p class="text-lg text-gray-700">
                    RabbitMQ 的消息模型基于 AMQP（高级消息队列协议），通过交换器（Exchange）、队列（Queue）、绑定（Binding）等组件构建了灵活而强大的消息路由和传递机制。在 RabbitMQ 中，可以根据不同的需求选择不同的消息模型，常见的包括点对点模型（Direct Exchange）、发布/订阅模型（Fanout Exchange）、主题模型（Topic Exchange）等。
                </p>
            </div>
        </section>

        <!-- Basic Concepts -->
        <section id="basic-concepts" class="mb-16">
            <h2 class="text-3xl font-bold mb-8 text-center">基本概念</h2>
            <div class="bg-white rounded-xl shadow-md overflow-hidden mb-8">
                <img src="https://cdn.nlark.com/yuque/0/2024/png/21449790/1712803600702-116cd42d-49d1-4031-8dfa-dd0e95b86754.png" alt="RabbitMQ核心组件" class="w-full">
            </div>
            <div class="grid md:grid-cols-2 gap-8">
                <div class="bg-white p-8 rounded-xl shadow-md">
                    <div class="flex items-center mb-4">
                        <i class="fas fa-envelope feature-icon text-2xl mr-3"></i>
                        <h3 class="text-xl font-bold">消息队列（Message Queue）</h3>
                    </div>
                    <p class="text-gray-700">消息队列是 RabbitMQ 中用于存储消息的容器。它允许生产者发送消息到队列，并允许消费者从队列中接收消息。消息队列的存在可以解耦生产者和消费者之间的通信，使得它们可以异步地进行消息传递。</p>
                </div>
                <div class="bg-white p-8 rounded-xl shadow-md">
                    <div class="flex items-center mb-4">
                        <i class="fas fa-exchange-alt feature-icon text-2xl mr-3"></i>
                        <h3 class="text-xl font-bold">交换器（Exchange）</h3>
                    </div>
                    <p class="text-gray-700">交换器是消息的转发器，用于接收从生产者发送的消息，并根据特定的规则将消息路由到一个或多个队列中。RabbitMQ 提供了不同类型的交换器，如直接交换器、扇出交换器、主题交换器等，每种类型的交换器都有不同的消息路由策略。</p>
                </div>
                <div class="bg-white p-8 rounded-xl shadow-md">
                    <div class="flex items-center mb-4">
                        <i class="fas fa-list feature-icon text-2xl mr-3"></i>
                        <h3 class="text-xl font-bold">队列（Queue）</h3>
                    </div>
                    <p class="text-gray-700">队列是消息的缓冲区，用于存储交换器路由过来的消息。消费者可以从队列中获取消息进行处理。每个队列都有一个唯一的名称，并且可以绑定到一个或多个交换器上。</p>
                </div>
                <div class="bg-white p-8 rounded-xl shadow-md">
                    <div class="flex items-center mb-4">
                        <i class="fas fa-link feature-icon text-2xl mr-3"></i>
                        <h3 class="text-xl font-bold">绑定（Binding）</h3>
                    </div>
                    <p class="text-gray-700">绑定是交换器和队列之间的关系，它定义了消息如何从交换器路由到队列。绑定通常包括交换器名称、队列名称和路由键（Binding Key）等信息。</p>
                </div>
            </div>
        </section>

        <!-- Message Models -->
        <section id="models" class="mb-16">
            <h2 class="text-3xl font-bold mb-12 text-center">消息模型</h2>
            
            <!-- Direct Exchange Model -->
            <div id="direct-model" class="mb-16">
                <div class="flex flex-col md:flex-row items-center mb-8">
                    <div class="md:w-1/4 text-center mb-6 md:mb-0">
                        <i class="fas fa-exchange-alt model-icon"></i>
                        <h3 class="text-2xl font-bold mt-2">点对点模型</h3>
                        <p class="text-indigo-600">Direct Exchange</p>
                    </div>
                    <div class="md:w-3/4">
                        <div class="bg-white rounded-xl shadow-md overflow-hidden">
                            <img src="https://cdn.nlark.com/yuque/0/2021/png/21449790/1636678859263-d96ce0df-745e-4e4f-83d8-f9783b2a0420.png" alt="点对点模型" class="w-full">
                        </div>
                    </div>
                </div>
                <div class="grid md:grid-cols-2 gap-8">
                    <div class="bg-white p-6 rounded-xl shadow-md">
                        <h4 class="text-lg font-bold mb-3 text-indigo-600"><i class="fas fa-star mr-2"></i>特点</h4>
                        <p class="text-gray-700">点对点模型是一种简单可靠的消息传递模式。消息直接发送到指定队列，每个消息只被一个消费者处理，消费者独占消费，保证消息的可靠传递和顺序性。路由键与队列的绑定关系是一对一的，消息直达目标队列，确保消息传递的可靠性和顺序性。这种模式适用于对消息传递的可靠性有较高要求的场景。</p>
                    </div>
                    <div class="bg-white p-6 rounded-xl shadow-md">
                        <h4 class="text-lg font-bold mb-3 text-indigo-600"><i class="fas fa-lightbulb mr-2"></i>适用场景</h4>
                        <p class="text-gray-700">点对点模型适用于需要点对点通信的场景，如请求/响应模式、任务分发等。例如，当系统需要处理一些需要保证顺序执行的任务时，可以使用点对点模型，生产者将任务消息发送到指定队列，消费者独占消费并按顺序处理任务。这种模式简单可靠，适用于大部分消息传递场景，尤其是需要保证消息的可靠传递和消费的场景。</p>
                    </div>
                </div>
            </div>
            
            <!-- Fanout Exchange Model -->
            <div id="fanout-model" class="mb-16">
                <div class="flex flex-col md:flex-row items-center mb-8">
                    <div class="md:w-1/4 text-center mb-6 md:mb-0">
                        <i class="fas fa-broadcast-tower model-icon"></i>
                        <h3 class="text-2xl font-bold mt-2">发布/订阅模型</h3>
                        <p class="text-indigo-600">Fanout Exchange</p>
                    </div>
                    <div class="md:w-3/4">
                        <div class="bg-white rounded-xl shadow-md overflow-hidden">
                            <img src="https://cdn.nlark.com/yuque/0/2021/png/21449790/1636678951399-544d955c-9d63-4f36-af02-751e3ba91b4f.png" alt="发布订阅模型" class="w-full">
                        </div>
                    </div>
                </div>
                <div class="grid md:grid-cols-2 gap-8">
                    <div class="bg-white p-6 rounded-xl shadow-md">
                        <h4 class="text-lg font-bold mb-3 text-indigo-600"><i class="fas fa-star mr-2"></i>特点</h4>
                        <p class="text-gray-700">发布/订阅模型是一种消息传递模式，其中消息被广播到所有订阅者。它不需要指定路由键，而是将消息广播到所有绑定的队列，实现一对多的消息广播。发布者与订阅者之间是解耦的，发布者不需要知道谁订阅了消息，而订阅者也不需要知道消息来自哪个发布者。这种模式具有高度的灵活性和扩展性，可以轻松地添加新的订阅者而不影响现有的发布者和订阅者。</p>
                    </div>
                    <div class="bg-white p-6 rounded-xl shadow-md">
                        <h4 class="text-lg font-bold mb-3 text-indigo-600"><i class="fas fa-lightbulb mr-2"></i>适用场景</h4>
                        <p class="text-gray-700">发布/订阅模型适用于需要将消息广播给多个消费者的场景。例如，系统中有多个服务或应用程序需要接收相同类型的消息时，可以使用发布/订阅模型。常见的场景包括实时通知、日志系统、广告推送等。另外，发布/订阅模型也适用于事件驱动架构，其中事件被发布到消息代理，并由订阅者订阅和处理。这种模式提高了系统的灵活性和可扩展性，允许系统中的不同部分之间松耦合地通信。</p>
                    </div>
                </div>
            </div>
            
            <!-- Topic Exchange Model -->
            <div id="topic-model" class="mb-16">
                <div class="flex flex-col md:flex-row items-center mb-8">
                    <div class="md:w-1/4 text-center mb-6 md:mb-0">
                        <i class="fas fa-tags model-icon"></i>
                        <h3 class="text-2xl font-bold mt-2">主题模型</h3>
                        <p class="text-indigo-600">Topic Exchange</p>
                    </div>
                    <div class="md:w-3/4">
                        <div class="bg-white rounded-xl shadow-md overflow-hidden">
                            <img src="https://cdn.nlark.com/yuque/0/2021/png/21449790/1636679160882-00e6705b-5c5e-4803-b3d1-84e024071185.png" alt="主题模型" class="w-full">
                        </div>
                    </div>
                </div>
                <div class="grid md:grid-cols-2 gap-8">
                    <div class="bg-white p-6 rounded-xl shadow-md">
                        <h4 class="text-lg font-bold mb-3 text-indigo-600"><i class="fas fa-star mr-2"></i>特点</h4>
                        <p class="text-gray-700">主题模型是一种灵活的消息传递模式，它允许消息发布者将消息发送到特定的主题（topic），而订阅者可以根据自己的需求选择订阅感兴趣的主题。与发布/订阅模型类似，主题模型也支持一对多的消息传递，但消息的路由是通过主题进行的，而不是通过固定的队列。这使得主题模型更灵活，因为订阅者可以根据自己的需求订阅不同的主题，而不需要接收所有的消息。</p>
                    </div>
                    <div class="bg-white p-6 rounded-xl shadow-md">
                        <h4 class="text-lg font-bold mb-3 text-indigo-600"><i class="fas fa-lightbulb mr-2"></i>适用场景</h4>
                        <p class="text-gray-700">主题模型适用于需要按主题进行消息分类和过滤的场景。例如，一个电商网站可以将不同类别的商品发布到不同的主题，如服装、家电、数码等，用户可以根据自己的兴趣订阅特定的主题，从而接收到与自己相关的商品信息。另一个例子是新闻发布系统，可以根据新闻的类型（政治、经济、体育等）将新闻发布到相应的主题，用户可以选择订阅感兴趣的新闻主题，以获取相关的新闻资讯。主题模型还适用于事件驱动架构，其中事件被发布到特定的主题，并由订阅者根据自己的需求选择订阅感兴趣的事件主题。这种模式提高了系统的灵活性和可扩展性，允许消息的发送和接收者之间更灵活地通信。</p>
                    </div>
                </div>
            </div>
            
            <!-- Work Queues Model -->
            <div id="work-model" class="mb-16">
                <div class="flex flex-col md:flex-row items-center mb-8">
                    <div class="md:w-1/4 text-center mb-6 md:mb-0">
                        <i class="fas fa-tasks model-icon"></i>
                        <h3 class="text-2xl font-bold mt-2">工作模型</h3>
                        <p class="text-indigo-600">Work Queues</p>
                    </div>
                    <div class="md:w-3/4">
                        <div class="bg-white rounded-xl shadow-md overflow-hidden">
                            <img src="https://cdn.nlark.com/yuque/0/2021/png/21449790/1636678885720-7cbe9b54-140b-4bd3-ba0e-46ac8ec49f81.png" alt="工作模型" class="w-full">
                        </div>
                    </div>
                </div>
                <div class="grid md:grid-cols-2 gap-8">
                    <div class="bg-white p-6 rounded-xl shadow-md">
                        <h4 class="text-lg font-bold mb-3 text-indigo-600"><i class="fas fa-star mr-2"></i>特点</h4>
                        <p class="text-gray-700">工作模型是一种基于队列的消息传递模式，它通过将消息发送到队列中并由多个消费者共同处理来实现消息的并发处理。在工作模型中，多个消费者可以同时从队列中获取消息进行处理，每个消息只被一个消费者处理，保证了消息的完整性和顺序性。工作模型通常用于处理大量的消息或需要并发处理的任务，可以通过增加消费者来提高消息处理的吞吐量。</p>
                    </div>
                    <div class="bg-white p-6 rounded-xl shadow-md">
                        <h4 class="text-lg font-bold mb-3 text-indigo-600"><i class="fas fa-lightbulb mr-2"></i>适用场景</h4>
                        <p class="text-gray-700">工作模型适用于需要并发处理大量消息或任务的场景。例如，一个电商网站在处理订单时可以使用工作模型，将订单信息发送到队列中，并由多个订单处理服务共同处理订单。另一个例子是日志处理系统，可以将日志消息发送到队列中，并由多个日志处理器同时处理日志消息，提高日志处理的效率和吞吐量。工作模型还适用于需要异步处理的任务，例如后台任务处理、批量数据处理等。这种模式提高了系统的并发能力和处理效率，使系统能够更有效地处理大量的消息和任务。</p>
                    </div>
                </div>
            </div>
            
            <!-- RPC Model -->
            <div id="rpc-model" class="mb-16">
                <div class="flex flex-col md:flex-row items-center mb-8">
                    <div class="md:w-1/4 text-center mb-6 md:mb-0">
                        <i class="fas fa-server model-icon"></i>
                        <h3 class="text-2xl font-bold mt-2">RPC模型</h3>
                        <p class="text-indigo-600">Remote Procedure Call</p>
                    </div>
                    <div class="md:w-3/4">
                        <div class="bg-white rounded-xl shadow-md overflow-hidden">
                            <img src="https://cdn.nlark.com/yuque/0/2021/png/21449790/1636679496095-087fc1a9-43a0-4d98-bd3f-30ac134c1693.png?x-oss-process=image%2Fformat%2Cwebp%2Fresize%2Cw_879%2Climit_0" alt="RPC模型" class="w-full">
                        </div>
                    </div>
                </div>
                <div class="grid md:grid-cols-2 gap-8">
                    <div class="bg-white p-6 rounded-xl shadow-md">
                        <h4 class="text-lg font-bold mb-3 text-indigo-600"><i class="fas fa-star mr-2"></i>特点</h4>
                        <p class="text-gray-700">RPC（Remote Procedure Call）模型是一种远程过程调用模式，它允许一个进程调用另一个进程的方法，就像调用本地方法一样，而不需要了解底层通信细节。在RPC模型中，客户端发起远程调用请求，服务端接收请求并执行相应的方法，然后将结果返回给客户端。RPC模型通常使用网络通信协议（如HTTP、TCP等）进行通信，可以实现跨网络的方法调用。</p>
                    </div>
                    <div class="bg-white p-6 rounded-xl shadow-md">
                        <h4 class="text-lg font-bold mb-3 text-indigo-600"><i class="fas fa-lightbulb mr-2"></i>适用场景</h4>
                        <p class="text-gray-700">RPC模型适用于需要远程调用方法并获取结果的场景。例如，一个分布式系统中的不同节点之间需要进行方法调用和数据交换时，可以使用RPC模型。常见的场景包括微服务架构中的服务调用、分布式计算中的任务分发和结果汇总、分布式数据库中的数据访问等。另一个例子是Web服务，客户端可以通过RPC模型调用远程服务器上的方法，例如调用远程API获取数据或执行操作。RPC模型提供了一种简单而有效的方法来实现分布式系统中的方法调用和数据交换，使得不同节点之间可以轻松地进行通信和协作。</p>
                    </div>
                </div>
            </div>
        </section>

        <!-- Comparison Table -->
        <section class="mb-16">
            <h2 class="text-3xl font-bold mb-8 text-center">消息模型对比</h2>
            <div class="bg-white rounded-xl shadow-md overflow-hidden">
                <div class="overflow-x-auto">
                    <table class="min-w-full divide-y divide-gray-200">
                        <thead class="bg-gray-50">
                            <tr>
                                <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">模型类型</th>
                                <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">路由方式</th>
                                <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">消费者数量</th>
                                <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">典型应用</th>
                            </tr>
                        </thead>
                        <tbody class="bg-white divide-y divide-gray-200">
                            <tr>
                                <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">点对点模型</td>
                                <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">精确匹配路由键</td>
                                <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">1个消费者</td>
                                <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">任务分发、请求/响应</td>
                            </tr>
                            <tr>
                                <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">发布/订阅模型</td>
                                <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">广播到所有队列</td>
                                <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">多个消费者</td>
                                <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">实时通知、日志系统</td>
                            </tr>
                            <tr>
                                <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">主题模型</td>
                                <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">模式匹配路由键</td>
                                <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">多个消费者</td>
                                <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">个性化消息推送</td>
                            </tr>
                            <tr>
                                <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">工作模型</td>
                                <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">轮询或公平分发</td>
                                <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">多个消费者</td>
                                <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">任务并行处理</td>
                            </tr>
                            <tr>
                                <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">RPC模型</td>
                                <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">直接调用</td>
                                <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">1个消费者</td>
                                <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">远程方法调用</td>
                            </tr>
                        </tbody>
                    </table>
                </div>
            </div>
        </section>

        <!-- Flow Diagram -->
        <section class="mb-16">
            <h2 class="text-3xl font-bold mb-8 text-center">RabbitMQ消息流程</h2>
            <div class="mermaid">
                graph LR
                    P[生产者] -->|发布消息| E[交换器]
                    E -->|根据路由键| Q1[队列1]
                    E -->|根据路由键| Q2[队列2]
                    Q1 --> C1[消费者1]
                    Q2 --> C2[消费者2]
                    Q2 --> C3[消费者3]
            </div>
        </section>
    </main>

    <!-- Footer -->
    <footer class="bg-gray-900 text-white py-12">
        <div class="container mx-auto px-6 text-center">
            <h3 class="text-xl font-bold mb-4">技术小馆</h3>
            <p class="mb-4">
                <a href="http://www.yuque.com/jtostring" class="text-gray-300 hover:text-white transition duration-300 underline">http://www.yuque.com/jtostring</a>
            </p>
            <div class="flex justify-center space-x-4">
                <a href="#" class="text-gray-300 hover:text-white transition duration-300">
                    <i class="fab fa-github text-xl"></i>
                </a>
                <a href="#" class="text-gray-300 hover:text-white transition duration-300">
                    <i class="fab fa-twitter text-xl"></i>
                </a>
                <a href="#" class="text-gray-300 hover:text-white transition duration-300">
                    <i class="fab fa-linkedin text-xl"></i>
                </a>
            </div>
        </div>
    </footer>

    <!-- Back to Top Button -->
    <a href="#" class="back-to-top bg-indigo-600 text-white p-3 rounded-full shadow-lg hover:bg-indigo-700 transition duration-300">
        <i class="fas fa-arrow-up"></i>
    </a>

    <script>
        // Mermaid initialization
        mermaid.initialize({
            startOnLoad: true,
            theme: 'default',
            flowchart: {
                useMaxWidth: false,
                htmlLabels: true,
                curve: 'basis'
            }
        });

        // Back to top button
        const backToTopButton = document.querySelector('.back-to-top');
        window.addEventListener('scroll', () => {
            if (window.pageYOffset > 300) {
                backToTopButton.classList.add('visible');
            } else {
                backToTopButton.classList.remove('visible');
            }
        });

        // Smooth scrolling for anchor links
        document.querySelectorAll('a[href^="#"]').forEach(anchor => {
            anchor.addEventListener('click', function(e) {
                e.preventDefault();
                document.querySelector(this.getAttribute('href')).scrollIntoView({
                    behavior: 'smooth'
                });
            });
        });

        // Highlight active navigation link
        const sections = document.querySelectorAll('section');
        const navLinks = document.querySelectorAll('.nav-link');
        
        window.addEventListener('scroll', () => {
            let current = '';
            
            sections.forEach(section => {
                const sectionTop = section.offsetTop;
                const sectionHeight = section.clientHeight;
                
                if (pageYOffset >= sectionTop - 150) {
                    current = section.getAttribute('id');
                }
            });
            
            navLinks.forEach(link => {
                link.classList.remove('active');
                if (link.getAttribute('href').includes(current)) {
                    link.classList.add('active');
                }
            });
        });
    </script>
</body>
</html>
```